#include <iostream>
#include <string>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>

#define ERR_EXIT(m)         \
    do                      \
    {                       \
        perror(m);          \
        exit(EXIT_FAILURE); \
    } while (0)

int main(int argc, char *argv[])
{
    mkfifo("tp", 0644); // 创建命名管道
    int infd;
    infd = open("abc", O_RDONLY); // 打开文件 abc 用于读取
    if (infd == -1)
        ERR_EXIT("open");

    int outfd;
    outfd = open("tp", O_WRONLY); // 打开命名管道 tp 用于写入
    if (outfd == -1)
        ERR_EXIT("open");

    char buf[1024];
    int n;
    while ((n = read(infd, buf, 1024)) > 0) // 从文件 abc 中读取数据
    {
        write(outfd, buf, n); // 将数据写入命名管道 tp
    }
    close(infd);  // 关闭文件描述符
    close(outfd); // 关闭文件描述符
    return 0;
}